package cn.le.string;

import java.util.Scanner;
import java.util.regex.MatchResult;

/**
 *Scanner的构造器可以接受任何类型的输入对象,包括File,InputStream,String或者Readable,
 *所有的输入,分词以及翻译的操作都隐藏在不同类型的next方法中,所有的基础类型(除char外)都有对应的
 * next方法,包括BigDecimal和BigInteger,所有的next方法,只要有在找到一个完成的分词之后才会返回,
 * Scanner还有对应的hasNext方法,用来判断下一个输入分词是否所需的类型
 *
 */
public class BetterRead {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(SimpleRead.input);
        String name = scanner.nextLine();
        System.out.println(name);

        System.out.println(scanner.hasNext());

        int age = scanner.nextInt();
        System.out.println(age);

        double favrite = scanner.nextDouble();
        System.out.println(favrite);


        //在默认的情况下,Scanner根据空白字符来输入进行分词,但是可以用正则表达式指定自己所需的定界符
        Scanner scanner1 = new Scanner("12,4323,123,43,234,34");
        scanner1.useDelimiter("\\s*,\\s*");//自定义定界符
        while (scanner1.hasNextInt())
        {
            System.out.println(scanner1.nextInt());
        }

        String threatDate = "3321.32132.321\b3213.43244432\n4324232.afa4532";
        Scanner scanner2 = new Scanner(threatDate);
        String pattern = "(\\d[.]\\d+[.]\\d)";
        while (scanner2.hasNext(pattern))
        {
             //当next方法配合指定的正则表达式使用时,将找到下一个匹配模式的输入部分
            //调用match方法就可以获得匹配的结果.它的工作方式与之前看到的正则表达式匹配相似
            scanner2.next(pattern);
            MatchResult match = scanner2.match();
            String ip = match.group(1);
            String date = match.group(2);
        }
        //Scanner仅仅针对下一个输入分词进行匹配,如果匹配的正则表达式中含有界定符,那永远都不可能匹配成功

    }

}
